import java.util.Iterator;
import java.util.List;

/**
 * Copyright (C) 2002 Michael Green <mtgreen@cs.ucsd.edu>
 * 
 * Copyright (C) 2002 Paul Kube <kube@cs.ucsd.edu>
 * 
 * Copyright (C) 2005 Owen Astrachan <ola@cs.duke.edu>
 * 
 * Copyright (C) 2011 Hoa Long Tam <hoalong.tam@berkeley.edu> and Armin Samii <samii@berkeley.edu>
 * 
 * This file is part of CS Boggle.
 * 
 * CS Boggle is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
 * 
 * CS Boggle is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along with CS boggle. If not, see <http://www.gnu.org/licenses/>.
 */

public class AutoPlayerLexiconFirst extends AbstractPlayer
{
	public AutoPlayerLexiconFirst(LexiconInterface lex)
	{
		this.initialize(lex);
	}

	/**
	 * Find all the valid words automatically, found words should be added via the <code>AbstractPlayer</code>'s <code>add</code> method.
	 * 
	 * @param board
	 *            is the BoggleBoard on which words are found
	 * @param lex
	 *            is the lexicon in which words are searched/validated
	 * @param minLength
	 *            of words found by an autoplayer
	 */
	public void findAllValidWords(BoggleBoard board, LexiconInterface lex, int minLength)
	{
		// Need to generalize to the interface
		WordOnBoardFinder finder = new WordOnBoardFinder();
		Iterator<String> iterator = lex.iterator();
		String dictionaryString;
		while (iterator.hasNext())
		{
			dictionaryString = iterator.next();
			List<BoardCell> list = finder.cellsForWord(board, dictionaryString);
			String word = getWord(board, list);
			
			if (!word.equals(""))
			{
				add(word);
			}
		}
	}

	@Override
	public String getName()
	{
		return "AutoPlayer";
	}

	private String getWord(BoggleBoard board, List<BoardCell> list)
	{
		String word = "";
		for (BoardCell cell : list)
		{
			word += board.getFace(cell.row, cell.col);
		}
		return word;
	}
}